package SecondeStage.MianXiangDuiXiang.AbstractClass.Final;

public class Final01 {
    public static void main(String[] args) {
        // final 可以修饰类、属性、方法和局部变量
        // 1.当不希望类被继承时，可以用final修饰
        // 2.当不希望父类的某个方法被子类覆盖/重写（Override）时，可以用final修饰
        // 3.当不希望类的某个属性的值被修改时，可以用final修饰
        // 4.当不希望某个局部变量被修改时，可以用final修饰
        E e =new E();
        //e.TAX_RATE =0.01;
    }
}

final class A{

}


//class B extends A{
//
//}


class C{
    // 如果我们要求hi不能被子类重写
    public final  void hi(){}


}

class D extends C{
//    public void hi(){
//
//    }
}

class E{
    // final修饰的属性叫常量，一般用 XX_XX_XX来命名（大写）
    // final修饰的属性必须在定义时赋初值，且以后不能再修改
    // 赋值可以在如下位置之一：
    // ① 定义时：如
    public final double TAX_RATE = 0.08;

    // ② 在构造器中
    public final double TAX_RATE2;

    public E() {
        this.TAX_RATE2 = 1.1;
    }

    // ③ 在代码块中
    public final double TAX_RATE3;

    {
        TAX_RATE3= 2.2;
    }
}

class F{
    public void cry(){
        final double  NUM = 0.01;
        //NUM = 0.02;
    }
}
